home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / apps / 408 / system.c < prev    next >
C/C++ Source or Header  |  1990-07-04  |  2KB  |  81 lines

  1. /*
  2.  * system.c  -  Mupfel-Kommando via _shell_p ausführen
  3.  * 23/10/88
  4.  */
  5.  
  6. #include <tos.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10.  
  11. /*
  12.  * MUPFEL_ONLY:
  13.  *     0 wenn's auch mit anderen Shells gehen soll
  14.  *     1 für Checks ob Mupfel oder MVMERGE wirklich da ist
  15.  */
  16. #define MUPFEL_ONLY 1
  17.  
  18. #define _SHELL_P ((long *)0x4f6L)
  19.  
  20. #if MUPFEL_ONLY
  21. #define SHELL_OK    (do_sys!=0 && (!strncmp(xbra_id,"XBRAMUPF",8) || !strncmp(xbra_id,"XBRAGMNI",8)))
  22. #else
  23. #define SHELL_OK    (do_sys!=0)
  24. #endif
  25.  
  26. /*
  27.  * int system(const char *cmd)
  28.  * Führt ein Kommando über die in _shell_p installierte Shell aus.
  29.  * Ohne Shell gibt's -1 als Returnwert, ansonsten
  30.  * den Returncode des ausgeführten Kommandos.
  31.  * Die Mupfel-interne Routine erwartet den Pointer auf die Kommando-
  32.  * zeile auf dem Stack und gibt den Returncode des ausgeführten
  33.  * Kommandos in Register D0.W zurück.
  34.  */
  35. int system(const char *cmd)
  36. {
  37.     /* Parameter auf dem Stack übergeben! */
  38.     int cdecl (*do_sys)(const char *cmd);
  39.     char *xbra_id;
  40.     long oldssp;
  41.  
  42.     oldssp = Super(0L);
  43.     do_sys = (void (*))*_SHELL_P;
  44.     Super((void *)oldssp);
  45.     xbra_id = (char *)((long)do_sys - 12);
  46.     
  47.     if (cmd==NULL)
  48.         return SHELL_OK;
  49.  
  50.     if (SHELL_OK)
  51.         return do_sys(cmd);
  52.     else
  53.         return -1;
  54. }
  55.  
  56. /*
  57.  * Testprogramm für system().
  58.  * Aus allen Argumenten wird wieder ein einziges zusammengebastelt,
  59.  * das dann per system() an Mupfel übergeben wird.
  60.  */
  61. int main(int argc,char **argv)
  62. {
  63.     int i, ex_code;
  64.     char str[256];
  65.     
  66.     printf("Shell status: %d\n",system(NULL));
  67.     *str = '\0';
  68.     for (i=1; i<argc; ++i)
  69.     {
  70.         strcat(str,argv[i]);
  71.         strcat(str," ");
  72.     }
  73.     printf("system(%s)\n",str);
  74.     ex_code = system(str);
  75.     if (ex_code == -1)
  76.         printf("Mupfel nicht da?!?\n");
  77.     else
  78.         printf("Returncode %d\n",ex_code);
  79.     return 0;
  80. }
  81.